<?php
class ANotaCreditoCliente
{
	public function __construct() {}
	
	public function contabilizaPago(EFacade & $facade) 
	{}
	public function actualizarCuentas(EFacade & $facade) 
	{
		
		
		$session=$facade->session;		
		//echo 'se entro';
		epLoadConfig('../config.xml');

		$m = epManager::instance();
		$doc = & $facade->getDocumentRoot();
	    $workflowNDC = & $facade->getWorkflow();
		$ezpdo_= getManager();
		$role=NULL;
		$montoCliente=$doc->importeTotal;
		
		$network=$doc->workflowRef->networkRef;
		
		$query='FROM MConfiguracionCuenta as t WHERE t.documento.oid=?';
		$configuracion=$ezpdo_->find($query,$network->epGetObjectId());
		//echo '<br>configuracion contable',$configuracion[0];
		
		$cuentas=$configuracion[0]->cuenta;
		
		
		//************CUENTAs POR COBRAR ACTUALIZACION********************************//
		foreach($cuentas as $c){
			
			if($c->posicion==1 and !$doc->devuelveDinero){
				$c->cuentaContable->disminuye($montoCliente,$doc);
				$c->cuentaContable->commit();
			}
			
			
			
		}
		
		
		
		//echo '<br>claro',$doc;
//		$transaccionBancaria = $ezpdo_->create('MTransaccionBancaria');
//		$transaccionBancaria->fechaTransaccion = date('U');//$doc->fechaCreacion; TOMA LA FECHA ACTUAL EN FORMATO UNIX.... carlos
//		
//		foreach($doc->formaPagoList as &$pagos){
//			if($ctaBancaria = &$pagos->formaPago->cuentaBancaria){
//				$ctaBancaria->saldo = $ctaBancaria->saldo - $pagos->montoPago;
//				$transaccionBancaria->cuentaBancaria = $ctaBancaria;  
//				$ctaBancaria->commit();
//			}
//			else{
//				$ctacaja = &$pagos->formaPago->cuentaCaja;
//				$ctacaja->saldo = $ctacaja->saldo - $pagos->montoPago;
//				$ctacaja->commit();
//			}
//			 
//		}

//		$transaccionBancaria->commit();//echo '<br>CASI listo';
		
		
		/*
		 * 
		 * 
		 */
		$formasPago=$doc->formaPagoList;
		foreach($formasPago as $formaPago){
			$montoImpuesto=0;
			$montoPagado=stringToNumber($formaPago->montoPago);
			$totalPagado+=$montoPagado;
			//echo "lo pagado hasta ahorita es: ",$totalPagado;
			//echo "<br>la forma de pago es ",$formaPago->formaPago->cuentaCaja;
			// Asignar a las cuetnas de caja o banco el monto
			if($cuentaCaja=&$formaPago->formaPago->cuentaCaja!=NULL){
	//echo "<br>entra aqui",$cuentaCaja;
				$saldoCajaViejo=$cuentaCaja->saldo;
				
				$sql='FROM MTipoTransaccion as t where t.cuentaCaja.oid = ?';
				$transacciones=$m->find($sql,$cuentaCaja->epGetObjectId());
		//		echo "<br>aqui";
				$tipoTransaccion=$transacciones[0];
				$montoAumento=0;
				
				
				if($doc>devuelveDinero){
					$saldoCajaActualizado=$saldoCajaViejo-$montoPagado;
				}
				else{
				$saldoCajaActualizado=0;
				}
				//Crear la transaccion
				$transaccion=$session->create('MTransaccion');
				$fechaTransaccion=time();
				$montoTransaccion=$montoPagado;
				$transaccion->esCaja=TRUE;
				$transaccion->fechaTransaccion=$fechaTransaccion;
				$transaccion->montoTransaccion=$montoTransaccion;
				$transaccion->debe=$montoTransaccion;
				$transaccion->saldoCuenta=$saldoCajaActualizado;
				if(strlen($formaPago->detalle)>0){
					$detalle="";
				} else {
					$detalle=" con ".$formaPago->formaPago->nombre." ".$formaPago->detalle;
				}
				$descripcion="Nota Credito Cliente ".$doc->numero .$detalle;
				$transaccion->descripcion=$descripcion;
				$transaccion->tipoTransaccion=$tipoTransaccion;
				$transaccion->cuentaCaja=$cuentaCaja;
				$transaccion->documento=$doc;
				$transaccion->commit();
				
				
				if($porcentaje=$tipoTransaccion->porcentajeComision>0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					
					//transaccion por comision
					
					$saldoCajaActualizado-=$montoImpuesto;
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoComision >0){
					
					$montoImpuesto-=$porcentaje;
					//transaccion por comision
					$saldoCajaActualizado-=$montoImpuesto;
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->porcentajeImpuesto >0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					
					//transaccion por impuesto
					$saldoCajaActualizado-=$montoImpuesto;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoImpuesto >0){
					
					$montoImpuesto-=$porcentaje;
					$saldoCajaActualizado-=$montoImpuesto;
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				
				
				 $saldoCajaNuevo=$saldoCajaActualizado;
			//	echo "el saldo es ",$saldoCajaNuevo;
				$cuentaCaja->saldo=$saldoCajaNuevo;
				$cuentaCaja->cuentaContable->disminuye($montoPagado,$doc);
				$cuentaCaja->cuentaContable->commit();
				
			} else {
				//echo "<br>entra aqui en el else";
				$cuentaCaja=&$formaPago->formaPago->cuentaBancaria;
				$saldoCajaViejo=$cuentaCaja->saldo;
				if($doc->devuelveDinero){
				$saldoCajaActualizado=$saldoCajaViejo-$montoPagado;
				}
				else{
					$saldoCajaActualizado=0;
				}
				
				$sql='FROM MTipoTransaccion as t where t.cuentaBancaria.oid = ?';
				$transacciones=$m->find($sql,$cuentaCaja->epGetObjectId());
		//		echo "<br>aqui";
				$tipoTransaccion=$transacciones[0];
				$montoAumento=0;
				
				//Crear la transaccion
				$transaccion=$session->create('MTransaccion');
				$fechaTransaccion=time();
				$montoTransaccion=$montoPagado+$montoImpuesto;
				$transaccion->esBanco=TRUE;
				$transaccion->fechaTransaccion=$fechaTransaccion;
				$transaccion->montoTransaccion=$montoTransaccion;
				$transaccion->debe=$montoTransaccion;
				if(strlen($formaPago->detalle)>0){
					$detalle="";
				} else {
					$detalle=" con ".$formaPago->formaPago->nombre." ".$formaPago->detalle;
				}
				$descripcion="Nota de Credito Cliente ".$doc->numero .$detalle;
				$transaccion->descripcion=$descripcion;
				$transaccion->tipoTransaccion=$tipoTransaccion;
				$transaccion->cuentaBanco=$cuentaCaja;
				$transaccion->documento=$doc;
				$transaccion->saldoCuenta=$saldoCajaActualizado;
				$transaccion->commit();
				
				
				if($porcentaje=$tipoTransaccion->porcentajeComision>0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					
					//transaccion por comision
					$saldoCajaActualizado-=$montoImpuesto;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoComision >0){
					
					$montoImpuesto-=$porcentaje;
					$saldoCajaActualizado-=$montoImpuesto;
					//transaccion por comision
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->porcentajeImpuesto >0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					$saldoCajaActualizado-=$montoImpuesto;
					//transaccion por impuesto
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoImpuesto >0){
					
					$montoImpuesto-=$porcentaje;
					$saldoCajaActualizado-=$montoImpuesto;
					//transaccion por impuesto
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->haber=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->saldoCuenta=$saldoCajaActualizado;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				
				
				
								
			    $saldoCajaNuevo=$saldoCajaActualizado;
			//	echo "el saldo es ",$saldoCajaNuevo;
				$cuentaCaja->saldo=$saldoCajaNuevo;
				$cuentaCaja->cuentaContable->disminuye($montoPagado,$doc);
				$cuentaCaja->cuentaContable->commit();
			}
			
			$cuentaCaja->commit();
		}
		
		
		
		/*
		 * 
		 * 
		 */
		
		
		
//		if($ctaBancaria = & $doc->facturaCliente->formaPago->cuentaBancaria){
//			$ctaBancaria->saldo = $doc->importeTotal - $ctaBancaria->saldo;//DEBERÍA SER AL CONTRARIO.. VERIFICAR... CARLOS
//			$transaccionBancaria->cuentaBancaria = $ctaBancaria;  
//		}
//		else{
//			$ctaCaja = & $doc->facturaCliente->formaPago->cuentaCaja;
//			$ctaCaja->saldo = $doc->importeTotal - $ctaCaja->saldo;//DEBERÍA SER AL CONTRARIO.. VERIFICAR... CARLOS
//		}
		
		
				
		
		//$ctaBancaria->commit();
		//$workflowSA = & $facade->getWorkflow();
		
		$doc->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios en su lista de items
		$workflowNDC->epSetDirty(TRUE);
		$facade->saveWorkflow();			
		//echo '<hr>TTT',$doc,' ---- ',$ctaBancaria;
		
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowNDC, 2); //TYPE AUTO AGENT
		$role=NULL;
		$transSA = $transSetSA->getTransByName('t2');
		$facade->fireTrans($transSA,$role,'actualizar cuentas', TRUE);
		//echo '<br>listo';
	}
}
?>